package com.hugang.designmode.factory;

/**
 * 工厂模式——简单工厂模式（不属于GOF23种设计模式）
 * <p>
 * 工厂模式：实现了创建者与调用者的分离，即将创建对象的具体过程屏蔽隔离起来，达到提高灵活性的目的
 * </p>
 * 开闭原则：一个软件的实体应当对外扩展开放，对修改关闭。即完成的代码不能因为需求变化而修改，而是
 * 应该通过新增代码的方式解决变化的需求。扩展性强，且维护成本低。
 * <p>
 * 简单工厂模式也叫静态工厂模式，就是工厂类一般使用静态方法，通过接受的参数不同来返回不同的实例对象
 * </p>
 * 缺点：对于增加新产品，不修改代码的话，是无法扩展的，违背了开闭原则。
 *
 * @author hg
 * @date 2020/6/13 11:18
 */
public class SimpleFactoryTest {

    public static void main(String[] args) {
        Car audi = CarFactory.getCar("奥迪");
        Car byd = CarFactory.getCar("比亚迪");
        audi.run();
        byd.run();
    }
}

/**
 * 汽车接口
 */
interface Car {
    /**
     * 定义了汽车能跑的规范
     */
    void run();
}

class Audi implements Car {

    @Override
    public void run() {
        System.out.println("奥迪车在跑");
    }
}

class Byd implements Car {

    @Override
    public void run() {
        System.out.println("比亚迪车在跑");
    }
}

class CarFactory {

    public static Car getCar(String carName) {
        if ("奥迪".equals(carName)) {
            return new Audi();
        } else if ("比亚迪".equals(carName)) {
            return new Byd();
        } else {
            return null;
        }
    }
}